//package com.jingdianjichi.subject.domain.redis;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.data.redis.core.Cursor;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ScanOptions;
//import org.springframework.data.redis.core.ZSetOperations;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.Set;
//import java.util.concurrent.TimeUnit;
//import java.util.stream.Collectors;
//import java.util.stream.Stream;
//
///**
// * RedisUtil工具类
// *
// * @author: ChickenWing
// * @date: 2023/10/28
// */
//@Component
//@Slf4j
//public class RedisUtil {
//
//    @Resource
//    private RedisTemplate redisTemplate;
//
//    private static final String CACHE_KEY_SEPARATOR = ".";
//
//    /**
//     * 构建缓存key
//     */
//    public String buildKey(String... strObjs) {
//        return Stream.of(strObjs).collect(Collectors.joining(CACHE_KEY_SEPARATOR));
//    }
//
//    /**
//     * 是否存在key
//     */
//    public boolean exist(String key) {
//        return redisTemplate.hasKey(key);
//    }
//
//    /**
//     * 删除key
//     */
//    public boolean del(String key) {
//        return redisTemplate.delete(key);
//    }
//
//    /**
//     * set(不带过期)
//     */
//    public void set(String key, String value) {
//        redisTemplate.opsForValue().set(key, value);
//    }
//
//    /**
//     * set(带过期)
//     */
//    public boolean setNx(String key, String value, Long time, TimeUnit timeUnit) {
//        return redisTemplate.opsForValue().setIfAbsent(key, value, time, timeUnit);
//    }
//
//    /**
//     * 获取string类型缓存
//     */
//    public String get(String key) {
//        return (String) redisTemplate.opsForValue().get(key);
//    }
//
//    public Boolean zAdd(String key, String value, Long score) {
//        return redisTemplate.opsForZSet().add(key, value, Double.valueOf(String.valueOf(score)));
//    }
//
//    public Long countZset(String key) {
//        return redisTemplate.opsForZSet().size(key);
//    }
//
//    public Set<String> rangeZset(String key, long start, long end) {
//        return redisTemplate.opsForZSet().range(key, start, end);
//    }
//
//    public Long removeZset(String key, Object value) {
//        return redisTemplate.opsForZSet().remove(key, value);
//    }
//
//    public void removeZsetList(String key, Set<String> value) {
//        value.stream().forEach((val) -> redisTemplate.opsForZSet().remove(key, val));
//    }
//
//    public Double score(String key, Object value) {
//        return redisTemplate.opsForZSet().score(key, value);
//    }
//
//    public Set<String> rangeByScore(String key, long start, long end) {
//        return redisTemplate.opsForZSet().rangeByScore(key, Double.valueOf(String.valueOf(start)), Double.valueOf(String.valueOf(end)));
//    }
//
//    public Object addScore(String key, Object obj, double score) {
//        return redisTemplate.opsForZSet().incrementScore(key, obj, score);
//    }
//
//    public Object rank(String key, Object obj) {
//        return redisTemplate.opsForZSet().rank(key, obj);
//    }
//
//    public Set<ZSetOperations.TypedTuple<String>> rankWithScore(String key, long start, long end) {
//        Set<ZSetOperations.TypedTuple<String>> set = redisTemplate.opsForZSet().reverseRangeWithScores(key, start, end);
//        return set;
//    }
//
//    public void putHash(String key, String hashKey, Object hashVal) {
//        redisTemplate.opsForHash().put(key, hashKey, hashVal);
//    }
//
//    public Integer getInt(String key) {
//        return (Integer) redisTemplate.opsForValue().get(key);
//    }
//
//    public void increment(String key, Integer count) {
//        redisTemplate.opsForValue().increment(key, count);
//    }
//
//    public Map<Object, Object> getHashAndDelete(String key) {
//        Map<Object, Object> map = new HashMap<>();
//        Cursor<Map.Entry<Object, Object>> cursor = redisTemplate.opsForHash().scan(key, ScanOptions.NONE);
//        while (cursor.hasNext()) {
//            Map.Entry<Object, Object> entry = cursor.next();
//            Object hashKey = entry.getKey();
//            Object value = entry.getValue();
//            map.put(hashKey, value);
//            redisTemplate.opsForHash().delete(key, hashKey);
//        }
//        return map;
//    }
//}
